package com.yuhanxun.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

/**
 * 读取properties文件
 * 
 */
public class DealCfg {
	private Properties propertie;
	private FileInputStream inputFile;
	private FileOutputStream outputFile;
	private boolean loadok = false;
	private String m_filepath;



	/**
	 * 初始化Configuration类
	 * 
	 * @param filePath
	 *            要读取的配置文件的路径+名称
	 */
	public DealCfg(String filePath) {
		propertie = new Properties();
		try {
			inputFile = new FileInputStream(filePath);
			propertie.load(inputFile);
			inputFile.close();
			m_filepath = filePath;
			loadok = true;
		} catch (FileNotFoundException ex) {
			System.out.println(filePath + "--->读取属性文件--->失败！- 原因：文件路径错误或者文件不存在");
		} catch (IOException ex) {
			System.out.println(filePath + "--->装载文件--->失败!");
		}
	}// end ReadConfigInfo(...)

	/**
	 * 重载函数，得到key的值
	 * 
	 * @param key
	 *            取得其值的键
	 * @return key的值 maybe null or ""
	 */
	public String getValue(String key) {
		if (loadok && propertie.containsKey(key)) {
			String value = propertie.getProperty(key);// 得到某一属性的值
			return value;
		} else
			return "";
	}// end getValue(...)

	/**
	 * 清除properties文件中所有的key和其值
	 */
	public void clear() {
		propertie.clear();
	}

	/**
	 * 改变或添加一个key的值，当key存在于properties文件中时该key的值被value所代替， 当key不存在时，该key的值是value
	 * 
	 * @param key
	 *            要存入的键
	 * @param value
	 *            要存入的值
	 */
	public void setValue(String key, String value) {
		propertie.setProperty(key, value);
	}

	public void setValue(String key, boolean value) {
		setValue(key, (value ? "true" : "false"));
	}

	public void saveFile() {
		saveFile("");
	}

	private synchronized void saveFile(String description) {
		if (!loadok)
			return;

		try {
			outputFile = new FileOutputStream(m_filepath);
			propertie.store(outputFile, description);
			outputFile.close();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
	}

}